Prempti:给 AI 编程代理套上缰绳

2026-05-20 28 预计阅读时间:1 分钟
来源:cncf.io AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:11 分钟

AI 编程代理已经不再是实验玩具。Claude Code 坐在你的终端里,读文件、跑命令、发网络请求、写代码——全是以你的名义。便利是真实的,风险也是真实的:一个没有约束的代理可以误删生产配置、把密钥推到公开仓库、或者执行一条你根本没打算运行的 shell 命令。Prempti 的切入点很直接——策略(Policy)与可见性(Visibility),让团队对 AI 代理的行为有规则、有记录、有控制。

为什么需要策略层

当前大多数开发者用 AI 编程代理的方式是"全开模式":给代理完整的 shell 权限、完整的文件系统访问、不加过滤的网络能力。这在个人实验项目里勉强可以,但在团队协作和生产环境中,等同于给每个开发者发了一把没有钥匙限制的主钥匙。

具体风险场景:

  • 文件越权写入:代理修改了 .env.productionterraform/main.tf,而你只打算让它改测试文件。
  • 命令误执行:代理跑了一条 rm -rfkubectl delete namespace production,因为它"觉得"那是清理步骤。
  • 数据外泄:代理把包含内部 API 密钥的代码片段发送到外部 LLM 服务,而公司合规要求密钥不能离开内网。
  • 行为不可审计:代理做了什么、什么时候做的、基于什么指令——没有结构化日志,事后无法追溯。

Prempti 的核心思路:在代理和操作系统之间插入一个策略引擎,代理的每个动作都经过规则校验和日志记录。

策略怎么写:从 YAML 到运行

Prempti 的策略用 YAML 定义,声明代理在哪些路径下能做什么操作。下面是一个可以直接用于项目的策略文件示例:

# prempti-policy.yaml — 放在项目根目录
version: "1"

agent:
  name: claude-code
  runtime: terminal

rules:
  # 文件读写策略
  file_access:
    allow_read:
      - "src/**"
      - "tests/**"
      - "docs/**"
      - "README.md"
      - "package.json"
    allow_write:
      - "src/**"
      - "tests/**"
    deny:
      - ".env*"
      - "terraform/**"
      - "k8s/**"
      - ".git/**"
      - "**/secrets.*"

  # Shell 命令策略
  shell:
    allow_patterns:
      - "git status"
      - "git diff*"
      - "git log*"
      - "npm test*"
      - "pytest*"
      - "ls *"
      - "cat src/**"
    deny_patterns:
      - "rm -rf*"
      - "kubectl delete*"
      - "curl*http://external*"
      - "sudo*"
      - "chmod 777*"
    # 允许但需要人工确认的命令
    confirm_patterns:
      - "git push*"
      - "npm publish*"
      - "docker push*"

  # 网络策略
  network:
    allow_domains:
      - "api.openai.com"
      - "api.anthropic.com"
      - "internal-api.mycompany.com"
    deny_domains:
      - "*"  # 默认拒绝所有,只放行 allow 列表
    block_leaked_patterns:
      - pattern: "AKIA[0-9A-Z]{16}"   # AWS Access Key
      - pattern: "ghp_[0-9a-zA-Z]{36}" # GitHub PAT
      - pattern: "sk-[0-9a-zA-Z]{48}"  # OpenAI API Key

  # 日志与审计
  logging:
    destinations:
      - type: file
        path: ".prempti/audit.log"
      - type: webhook
        url: "https://internal-api.mycompany.com/prempti/events"
    fields:
      - timestamp
      - agent_name
      - action_type   # file_read / file_write / shell_exec / network_request
      - target        # 具体文件路径、命令、URL
      - rule_matched  # 哪条规则放行或拦截
      - decision      # allow / deny / confirm_required

把文件放到项目根目录后,启动代理时通过 Prempti 加载策略:

# 安装 Prempti(假设已发布为 npm 包或 pip 包)
npm install -g prempti   # 或 pip install prempti

# 用 Prempti 启动 Claude Code,策略自动生效
prempti run --policy prempti-policy.yaml --agent claude-code

# 查看实时审计日志
tail -f .prempti/audit.log

当代理尝试执行被 deny 规则匹配的操作时,Prempti 会拦截并记录;命中 confirm_patterns 的操作会暂停并弹出确认提示,等待开发者按 y 才继续。

可见性:审计日志长什么样

策略拦截只是半件事,另一半是知道代理到底干了什么。Prempti 的审计日志输出结构化事件,便于接入现有的监控体系:

{
  "timestamp": "2025-07-11T14:32:07Z",
  "agent_name": "claude-code",
  "action_type": "shell_exec",
  "target": "kubectl delete namespace staging",
  "rule_matched": "shell.deny_patterns[1]",
  "decision": "deny",
  "session_id": "abc123",
  "user": "zhangwei"
}
{
  "timestamp": "2025-07-11T14:33:12Z",
  "agent_name": "claude-code",
  "action_type": "file_write",
  "target": "src/api/handlers.py",
  "rule_matched": "file_access.allow_write[0]",
  "decision": "allow",
  "diff_summary": "+18/-3 lines",
  "session_id": "abc123",
  "user": "zhangwei"
}

你可以用简单脚本把日志转成团队可读的日报:

#!/usr/bin/env python3
"""prempti-daily-report.py — 生成 Prempti 审计日报"""
import json
from collections import Counter
from datetime import datetime, timedelta
from pathlib import Path

log_path = Path(".prempti/audit.log")
yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")

actions = []
denies = []
confirms = []

for line in log_path.read_text().splitlines():
    event = json.loads(line)
    if not event["timestamp"].startswith(yesterday):
        continue
    actions.append(event["action_type"])
    if event["decision"] == "deny":
        denies.append(f"{event['action_type']}: {event['target']}")
    if event["decision"] == "confirm_required":
        confirms.append(f"{event['action_type']}: {event['target']}")

print(f"=== Prempti 日报 {yesterday} ===")
print(f"总操作数: {len(actions)}")
print(f"操作分布: {Counter(actions)}")
print(f"\n拦截事件 ({len(denies)}):")
for d in denies:
    print(f"  ✗ {d}")
print(f"\n待确认事件 ({len(confirms)}):")
for c in confirms:
    print(f"  ⏳ {c}")
# 运行日报脚本
python3 prempti-daily-report.py

团队落地:从个人实验到组织级管控

Prempti 解决的是"信任边界"问题。以下是一个分阶段推进的思路:

阶段一:个人开发者——先加可见性

不急着上严格策略,先把日志打开,观察自己用的代理到底在做什么。一周后回顾日志,你会发现代理的行为模式远比你直觉以为的更广——这是制定策略的数据基础。

# 最小起步:只开日志,不拦截
version: "1"
agent:
  name: claude-code
  runtime: terminal
rules:
  file_access:
    allow_read: ["**"]
    allow_write: ["**"]
  shell:
    allow_patterns: ["*"]
  network:
    allow_domains: ["*"]
logging:
  destinations:
    - type: file
      path: ".prempti/audit.log"
  fields: [timestamp, action_type, target, decision]

阶段二:项目级——锁定敏感路径

根据日志观察结果,把生产配置、密钥文件、基础设施定义加入 deny 列表,把推送和发布操作加入 confirm 列表。这一步不影响日常开发效率,但堵住了最大的风险口。

阶段三:组织级——统一策略模板 + 集中审计

团队维护一份标准策略模板(比如 company-prempti-policy.yaml),所有项目继承并允许局部覆盖。审计日志通过 webhook 统一发到内部安全平台,和现有的 SIEM 或合规系统对接。

# 组织级策略继承示例
version: "1"
inherits: "https://internal-git.mycompany.com/devops/prempti-base-policy.yaml"
agent:
  name: claude-code
  runtime: terminal
rules:
  # 继承基础策略后,项目级只做增量覆盖
  file_access:
    deny:
      - ".env.production"   # 项目额外加一条
  shell:
    confirm_patterns:
      - "make deploy*"      # 项目特有的部署命令需要确认

边界与取舍

Prempti 不是万能盾牌,几个现实边界需要正视:

  • 策略过严会逼人绕过:如果 deny 列表太长,开发者会关掉 Prempti 直接跑裸代理。策略要精准,不是越多越好。
  • 代理能力在快速扩展:今天的策略可能覆盖不了明天代理新增的能力(比如直接操作数据库)。策略需要跟着代理能力迭代。
  • 确认提示打断流畅度:confirm_patterns 每弹一次确认就打断一次工作流。只对真正不可逆的操作加确认,别对 git commit 也加。
  • 本地策略无法防恶意代理:如果代理本身有意绕过策略引擎(比如直接调用系统 API 而不走 shell),本地策略层有被绕过的理论可能。这需要更深层的集成,比如 OS 级别的沙箱。

落地检查清单:

  • ✅ 项目根目录有 prempti-policy.yaml
  • .env*、密钥文件、基础设施配置在 deny 列表
  • rm -rfkubectl deletesudo 在 shell deny 列表
  • git pushnpm publishdocker push 在 confirm 列表
  • ✅ 审计日志写入 .prempti/audit.log 并接入团队监控
  • ✅ 每周回顾一次日志,更新策略规则

AI 编程代理是好工具,但好工具也需要好护栏。Prempti 提供的策略和可见性,让团队在享受代理效率的同时,不用赌它不会踩坑。


相关推荐