一、背景 & 问题描述:为什么需要「约束锁」?

现在越来越多同学用 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 hooks
  • add:添加一条约束(支持直接写一段文字,也支持交互模式)
  • list:查看当前所有约束列表
  • remove:删除某条约束(支持交互选择)
  • inject:输出所有约束文本(给 OpenClaw / hook 使用)

安装完成后,你会有两个命令入口:

  • claw-constraint-lock
  • claw-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 驱动的脚本仓库,会执行各种文件操作、接口调用。

步骤:

  1. 在工程根目录执行:

    claw-lock init

  2. 添加关键安全约束:

    claw-lock add "禁止删除项目根目录以外的任何文件。"

    claw-lock add "禁止在未提示用户确认的情况下执行 shell 命令 rm -rf。"

  3. 在 OpenClaw 的 hook / 任务初始化中,每次任务开头都执行:

    claw-lock inject

    并把输出作为「系统指令」提供给 Agent。

  4. 之后即使多轮对话、长上下文,约束永远可以从本地文件再次注入,避免被压缩丢失

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐