让 AI 永不“忘词”:用 claw-constraint-lock 给你的 Agent 上一把「约束安全锁」
一、背景 & 问题描述:为什么需要「约束锁」?
现在越来越多同学用 OpenClaw / 各种 AI Agent 做自动化工作流,但都会遇到一个共同的问题:
- 对 Agent 下了一堆「约束/规则」(比如安全边界、禁止事项、业务限制等)
- 对话/上下文一长,模型为了「上下文压缩」,最容易被丢弃的,恰恰就是你这些约束说明
- 结果就是:
- 前几轮还好好的在守规矩
- 聊着聊着,Agent 就开始「忘记」约束,做出一些越界操作
这既影响安全性,也影响可靠性。
所以我做了一个小工具:claw-constraint-lock,专门用来**「给你的约束上锁」**,让它们不会在上下文压缩中被悄悄遗忘。
- GitHub 仓库地址:
https://github.com/huanglvjing/claw-constraint-lock - npm 包地址:
https://www.npmjs.com/package/claw-constraint-lock
这个工具是一个简单的 CLI,主要解决两个核心痛点:
- 把你的约束独立存储在本地文件,和对话上下文分离
- 给 OpenClaw 提供一个统一的「hook」,随时可以重新注入完整约束文本
二、工具简介:claw-constraint-lock 能做什么?
核心能力:
init:在当前项目中初始化约束存储和 OpenClaw hooksadd:添加一条约束(支持直接写一段文字,也支持交互模式)list:查看当前所有约束列表remove:删除某条约束(支持交互选择)inject:输出所有约束文本(给 OpenClaw / hook 使用)
安装完成后,你会有两个命令入口:
claw-constraint-lockclaw-lock(简写)
任意一个都可以使用。
三、环境准备
- 操作系统:Windows / macOS / Linux 均可
- Node.js 版本:
>= 18.0.0 - npm 已安装:Node.js 自带 npm,一般不需要单独安装
1. 检查 Node & npm 版本
node -v
npm -v
如果 node -v 小于 18,建议去 Node 官网升级到 LTS 最新版本。
四、全局安装 claw-constraint-lock
在任意终端执行:
npm install -g claw-constraint-lock
看到类似输出即可(省略部分):
added X packages in Ys
验证是否安装成功
claw-constraint-lock --help
# 或
claw-lock --help
正常情况下会看到类似下面的帮助信息:
Usage: claw-lock [options] [command]
🔒 防止 OpenClaw 因上下文压缩遗忘你的约束指令
Options:
-V, --version output the version number
-h, --help display help for command
Commands:
init 注册到当前项目的 OpenClaw hooks(首次使用必须执行)
add [options] [text] 添加一条约束(不传参数时进入交互模式)
list [options] 查看所有约束
remove [id] 删除约束(不传 ID 时进入交互选择模式)
inject 输出约束文本(由 OpenClaw hook 自动调用,无需手动执行)
help [command] display help for command
五、在项目中初始化(首次使用必做)
进入你的某个 OpenClaw / Agent 项目目录:
cd path/to/your-project
claw-constraint-lock init
# 或者
claw-lock init
它会做的事(根据实现大致行为描述):
- 在当前项目创建一个用于存储约束的文件/目录(例如
claw-constraints.json或类似) - 注册一套 OpenClaw hook(让 Agent 可以在需要时自动调用
inject) - 确保后续
add/list/remove/inject都针对当前项目生效,而不是乱写别处
六、添加约束:add
1. 交互式添加(推荐)
直接执行:
claw-constraint-lock add
# 或
claw-lock add
不带参数时,会进入一个交互式界面,通常是类似:
- 提示你输入约束内容
- 可能还会让你确认 / 选择标签(视实现而定)
例如你可以添加这样的约束:
- 「禁止发送任何真实生产数据库的连接字符串」
- 「所有外部请求必须通过公司代理」
- 「不要修改
/etc下的任何系统配置文件」
2. 直接在命令行中添加
也支持直接将约束写在命令后面,例如:
claw-lock add "禁止删除任何生产环境数据,只允许读操作。"
这会直接把这条文字当作一条约束存起来,无需交互。
七、查看当前约束:list
当你已经添加了几条约束,可以随时查看:
claw-lock list
一般会列出一个带 ID 的列表,例如(示意):
[1] 禁止删除任何生产环境数据,只允许读操作。
[2] 所有请求外部 API 前必须记录日志。
[3] 不得在日志中打印用户的敏感信息(密码、身份证号等)。
这些 ID 会在删除/操作时用到。
八、删除约束:remove
1. 交互式删除(不记 ID 时好用)
直接运行:
claw-lock remove
如果你不传 ID,通常会进入交互模式(例如一个列表选择界面),你可以用上下键选择要删的约束条目,然后确认。
2. 指定 ID 删除
如果你已经知道要删的是第 N 条,例如 ID 是 2:
claw-lock remove 2
删完可以再 claw-lock list 看一下是否已经移除。
九、注入约束文本:inject(给 OpenClaw / Hook 用)
inject 命令会把当前所有约束按一定格式输出到标准输出(stdout),主要用途是:
- 在 OpenClaw 的 hook 中自动调用这个命令
- 把返回的文本拼接到 Prompt 或 System Prompt 中
- 确保每次对话开始前,Agent 都重新「加载」所有约束
简单手工测试可以运行:
claw-lock inject
你会看到类似:
# 当前项目约束列表:
1. 禁止删除任何生产环境数据,只允许读操作。
2. 所有请求外部 API 前必须记录日志。
3. 不得在日志中打印用户的敏感信息(密码、身份证号等)。
在实际工程中,可以在你的 OpenClaw pipeline 或 Agent 初始化逻辑里,类似这样(伪代码示意):
const constraints = execSync('claw-lock inject').toString();
// 把 constraints 作为 system prompt / 前置指令拼到对话前面
这样就算 OpenClaw 为了节省上下文把之前的对话截断了,你也可以在每次任务开始时重新注入一份完整的约束。
十一、典型使用场景示例
1. 给某个自动化脚本工程加约束保护
场景:你有一个 OpenClaw 驱动的脚本仓库,会执行各种文件操作、接口调用。
步骤:
-
在工程根目录执行:
claw-lock init
-
添加关键安全约束:
claw-lock add "禁止删除项目根目录以外的任何文件。"
claw-lock add "禁止在未提示用户确认的情况下执行 shell 命令 rm -rf。"
-
在 OpenClaw 的 hook / 任务初始化中,每次任务开头都执行:
claw-lock inject
并把输出作为「系统指令」提供给 Agent。
-
之后即使多轮对话、长上下文,约束永远可以从本地文件再次注入,避免被压缩丢失
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)