Skip to main content
Node.js 主机若要在自己进程内得到允许或拒绝的决策,可以调用 checkCommand,而不必安装智能体集成。该函数按当前策略检查一条 shell 命令并返回决策,不会执行这条命令。 这只是一个函数,不是插件框架。它可以替代哪些集成,请参阅集成架构

安装与导入

该包在根导出之外还导出 cc-safety-net/api 子路径:
该包需要 Node.js 18 或更高版本以及 ESM。它声明为 "type": "module",没有 CommonJS 构建,因此 require() 无法解析该子路径。

checkCommand

调用是同步的:先读取本地策略文件、文件系统状态和 CC_SAFETY_NET_* 环境设置,再返回允许或拒绝。

输入

cwd 必填,没有默认值。API 不会回退到 process.cwd(),因此由主机决定命令属于哪个项目。

结果

决策以 kind 为准。deny 表示主机不得执行这条命令。reason 是展示文本。不要解析或比较它,ruleId 也只作为诊断数据。拒绝可能对应哪些情况,请参阅被阻止的命令

错误

没有类型约束的调用方可能传入 TypeScript 会拒绝的值,因此该函数会重新校验输入。checkCommand 抛出的 TypeError 带有以下消息之一: checkCommand 会捕获已知的防护失败,转而返回它的 fail-closed 拒绝,以免该失败变成主机侧的 fail-open 失误。其余异常都会抛给调用方。
如果 checkCommand 抛出异常,不要执行这条命令。抛出异常不等于允许。

不可用的工作目录

cwd 先用 resolve() 归一化,再做检查。该路径的 stat 结果必须是目录,且可读、可搜索。这里刻意没有 realpath 步骤,因此 OpenCode 插件和本函数对同一个目录给出一致的决策。 该检查失败时,调用返回带 fail-closed 原因的拒绝,而不是去分析错误的项目:

示例

一次调用会做什么

该函数构造一个名为 library-api 的命令工具调用,shell 设为 auto,配置工作目录和执行工作目录都设为归一化后的 cwd,然后直接交给防护评估。因为它调用的是防护而不是智能体集成,所以既不会执行命令,也不会写入审计记录、修改配置或发起网络请求。 命令会被完整检查,包括命令对机密文件的访问。主机自己的非 shell 文件工具,例如读取、写入、编辑和搜索,不在本函数的检查范围内。

环境变量

每次调用都从进程环境读取 CC_SAFETY_NET_* 设置,因此修改这些设置会改变后续决策。无效的 CC_SAFETY_NET_LEVEL 会被忽略,并在 stderr 上报告:
报告的值以 JSON 字符串形式加引号,并截断到前 40 个字符。完整列表请参阅环境变量

相关页面

  • 环境变量:一次调用会读取的全部设置。
  • 被阻止的命令:拒绝可能对应哪些情况。
  • 集成架构:各智能体集成的说明;对自行执行命令的主机来说,本函数可以替代它们。
最后修改于 2026年8月25日